package 静态常量;

/**
 * @projectName: com.xiayuanxing.designPattern
 * @className: 静态常量.Singletion01
 * @author: xiayuanxing
 * @description: 饿汉式（静态常量）
 * @date: 2021/12/14 17:06
 * @version: 1.0
 */
public class Singletion01 {

    //1.实现步骤
    //构造器私有化（防止new）
    //类的内部创建对象
    //向外暴露一个静态的公共方法
    //2.优缺点说明：
    // 1)优点：这种写法比较简单，就是在类装载的时候就完成实例化。避免了线程同步问题。
    // 2)缺点：在类装载的时候就完成实例化，没有达到LazyLoading的效果。如果从始至终从未使用过这个实例，则会造成内存的浪费
    // 3)这种方式基于classloder机制避免了多线程的同步问题，不过，instance在类装载时就实例化，
    // 在单例模式中大多数都是调用getInstance方法，但是导致类装载的原因有很多种，
    // 因此不能确定有其他的方式（或者其他的静态方法）导致类装载，这时候初始化instance就没有达到lazyloading的效果
    // 4)结论：这种单例模式可用，可能造成内存浪费

    public static void main(String[] args) {

        Singletion1 singletion1 = Singletion1.getInstance();
        Singletion1 singletion2 = Singletion1.getInstance();
        System.out.println(singletion1==singletion2);
        System.out.println(singletion1.hashCode());
        System.out.println(singletion2.hashCode());

    }
}


class  Singletion1{
    //1.构造器私有化（防止new
    private Singletion1(){

    };

    //2.类的内部创建对象
    private final static Singletion1 instance = new Singletion1();

    //3.向外暴露一个静态的公共方法
    public static Singletion1 getInstance(){
        return instance;
    }


}
